'use strict'
//变量作用域


//var声明关键字
/* 
1、var声明的变量可以是全局的（函数外面），也可以是函数级的（函数内部）。
（注意：忽略块级作用域）这是JavaScript由来已久的特性。
var声明的变量是可以修改的，如果不初始化会输出undefined，不会报错。
*/
/*
var AAA='我是全局变量'
console.log(AAA);//打印全局变量aaa的内容

function myfunction (formal){

    var aaa= '我是函数级全局变量';
    
    aaa=formal;
    console.log(aaa);
  
}
myfunction();//调用函数，打印函数内变量aaa的内容
myfunction(AAA);

//console.log(aaa);//函数外调用函数内定义的全局变量aaa会报错
//全局变量是相对的
 */



//let声明关键字

/*
 2、let声明的变量在{}中使用，变量的作用域限制在块级域中。
    let是块级作用域，函数内部使用let定义后，对函数外部无影响。
*/

/* 
var sum=a;
function myfunction (){
    var a=100;
    for ( var i = 0; i < 10; i++) {
        console.log(i);
        
    }
    a=a+i;
    console.log(a);
    return a;
    
}
myfunction02();//结果a=110,说明a=a+i运行成功!
 */


//函数嵌套

/*
function myfunction (){

    var x=100;
    
    return x*2;
    
}
myfunction();
 */


//变量提升
//函数内定义的变量都会将定义变量的代码提升到函数体顶部,因为这一特性,编写函数体内的代码时应
//尽量先声明好变量

/*
function myfunction (){
    var aaa =10;
    console.log(aaa);
    console.log(y);
     var y=aaa+1;
}


//全局作用域
//事实上,用户自己定义的函数都绑定在window这个默认的全局对象上。



myfunction();
 */

var aaa='我绑定在window上';
alert(window.aaa);



























//const关键字用于定义常量。
/*
const a ="啊，我是常量，你不能碰我";
console.log(a);

a="我就碰你，你准备打我还是吐口水？？";//不能修改常量的值！
*/